日前有朋友問到實作方面的問題,所以把過去的一些經驗稍作整理。
基本上,設計一個情境感知的的服務或應用,首先要定義哪些情境需要被感知。這其實是個難度很高的問題,關係到整個服務或應用所提供的價值,屬於「戰略」的層次。要解答這個問題,「使用者中心設計」(user-centered design)的領域有很多不錯的方法可以參考,不過不在這篇文章討論的範圍。
一旦決定了要感知的情境,該如何設計這個機制呢?
以程式開發的觀點,對情境的感知可以視為一個「事件處理機制」(event handling),就像「擊點滑鼠右鍵」、「誤觸筆電的觸控板」,系統要能知道這件事情的發生,並且採取對應的措施。
一個情境被感知到之後,該採取什麼動作(event handler),同樣屬於「為使用者提供價值」的問題,所以這裡我們暫時聚焦在實作「事件聽取機制」(event listener)的基本原則。
要判斷一個事件是不是發生,可以透過幾種方是式處理。一是透過分析找出規則(rule-based),另一種是收集大量的資料讓機器自己學習規則(machine learning),當然實作上更常見的是兩者的混合(hybrid)。
以下是從前的工作筆記,只是基本原則,不見得適用於所有的狀況。
- EventHandler: Void, do whatever necessary for the context - EventListener: Boolean, determine the context is happening or not - rule-based: - design by hands of experts - ML based: 1. Set up a sensor recording interface 2. Simulate the context to aware of 3. Collect sensor data stream, and label each record with "in-context" and "not-in-context" 4. Train a statistical model for the above data (collected in 3) 5. Use the trained model as the decision rules in EventListener - Hybrid: - combining ML with some heuristic rules - Fine tuning with usability test
筆者一邊寫這篇,一邊在看 Google I/O 2013 的現場直播,發現新的 Android 已經把 activity recognition 的功能放入系統中,也就是說:android 系統本身就提供了幾種「行動狀態的感知」(靜止,行走,騎自行車,或是開車),開發者不需要再自己設計這幾種情境的事件聽取機制,只要直接呼叫系統功能即可。簡單的說,這篇相當程度是白寫了,真是好樣的, Google!
沒有留言:
張貼留言